package com.zimmor.listener;

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @Author:zimmor
 * @Date: 2021/12/30 1:03
 * @Description 消费者 第二种模式 RabbitListen注解加到方法上,推介使用这种方式，因为这种一个类里可以有多个消费者
 * @version: 1.0.0
 */
@Component
public class Customer3 {
    /**
     * 工作队列模型的消费者1
     * @param message
     */
    @RabbitListener(queuesToDeclare = @Queue("workqueue"))
    public void getMessage(String message) {
        System.out.println("工作队列的消费者1接受到的消息：" + message);
    }
    /**
     * 工作队列模型的消费者2
     * @param message
     */
    @RabbitListener(queuesToDeclare = @Queue("workqueue"))
    public void getMessage2(String message) {
        System.out.println("工作队列的消费者2接受到的消息：" + message);
    }

    /////////////////////////////////////////////////////////

    /**
     * 广播模型 消费者1
     */
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, //创建临时队列
                    exchange = @Exchange(value = "fanout", type = "fanout") //声明交换机

            )

    })
    public void getMessage3(String message) {
        System.out.println("广播模型的消费者1接受到的消息：" + message);
    }

    /**
     * 广播模型 消费者2
     */
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, //创建临时队列
                    exchange = @Exchange(value = "fanout", type = "fanout") //声明交换机

            )

    })
    public void getMessage4(String message) {
        System.out.println("广播模型的消费者2接受到的消息：" + message);
    }
    ////////////////////////////////////////////////////////////////
    /**
     * 路由模型 消费者1
     */
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, //创建临时队列
                    exchange = @Exchange(value = "routings", type = "direct"), //声明交换机
                    key = {"info", "error", "warning"}

            )

    })
    public void getMessage5(String message) {
        System.out.println("路由模型的消费者1接受到的消息：" + message);
    }

    /**
     * 路由模型 消费者2
     */
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, //创建临时队列
                    exchange = @Exchange(value = "routings", type = "direct"), //声明交换机
                    key = {"error"}

            )

    })
    public void getMessage6(String message) {
        System.out.println("路由模型的消费者2接受到的消息：" + message);
    }
    /////////////////////////////////////////////////////
    /**
     * 动态路由模型 消费者1
     */
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, //创建临时队列
                    exchange = @Exchange(value = "topics", type = "topic"), //声明交换机
                    key = {"user.#"}

            )

    })
    public void getMessage7(String message) {
        System.out.println("动态路由模型的消费者1接受到的消息：" + message);
    }

    /**
     * 动态路由模型 消费者2
     */
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue, //创建临时队列
                    exchange = @Exchange(value = "topics", type = "topic"), //声明交换机
                    key = {"user.*"}

            )

    })
    public void getMessage8(String message) {
        System.out.println("动态路由模型的消费者2接受到的消息：" + message);
    }
}
